﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace T01Interface
{
    class Program
    {
        static void Main(string[] args)
        {
            BankCard card1 = new BankCard("张三");
            CreditCard card2 = new CreditCard("李四");
            IPay[] pays = { card1, card2 ,new BankCard("王五") { Money=150} };
            foreach(IPay pay in pays)
            {
                if(pay.Pay(200))
                {
                    Console.WriteLine("{0}付款成功",pay.GetName());
                }
                else
                {
                    Console.WriteLine("{0}付款失败", pay.GetName());
                }
            }
            Console.ReadKey();
        }
    }
    
        //Ixxxx形式表示是接口  xxxable也是接口
       /// <summary>
       /// 付款接口契约
       /// </summary>
         interface   IPay        
        {
            bool Pay(decimal price);
            string GetName();
        }
    /// <summary>
    /// 借记卡类
    /// </summary>
    class BankCard : IPay
    {
        //字段
        private string name;

        public BankCard(string name)
        {
            this.name = name;
        }
        //属性(首字母大写)
        public decimal Money = 1000;

        //生成相关代码 alt+enter

        public string GetName()
        {
            return name;
        }

        public bool Pay(decimal price)
        {
            if (Money >= price)
            {
                Money -= price;
                return true;
            }
            else {
                return false;
            }
        }
    }
    /// <summary>
    /// /信用卡
    /// </summary>
    class CreditCard : IPay
    {
        private string name;

        public CreditCard(string name)
        {
            this.name = name;
        }
        public decimal Overdraft = 0;
        public string GetName()
        {
            return this.name;
        }

        public bool Pay(decimal price)
        {
            if (Overdraft < price)
            {
                Overdraft += price;
                return true;
            }
            else
            {
                return false;
            }
        }

    }
}
